AWS ECS의 리소스는 어떤 구조로 되어있는가?

요약

  • ECS의 리소스는 클러스터, 서비스, 태스크, 태스크 정의, 컨테이너로 구성
Cluster (1)
└── Service (1:N)
   └── Task (1:N)
       ├── Task Definition (1:1, shared in service)
       └── Container (1:N)
  • 각 리소스는 ?

    • 클러스터 - 서비스와 태스크의 논리적인 집합
    • 서비스 - 동일한 태스크 정의를 사용하는 태스크의 집합
    • 태스크 정의 - 태스크를 실행하기 위한 정보가 담긴 레시피
    • 태스크 - 하나 이상의 컨테이너를 실행하는 인스턴스
    • 컨테이너 - 도커 기반의 소프트웨어 패키지

ECS의 리소스 구조

Amazon Elastic Container Service(ECS)는 클라우드 환경에서 컨테이너화된 애플리케이션을 쉽게 실행할 수 있게 해주는 서비스입니다. ECS의 리소스 구조는 실행 모드(EC2, Fargate)에 따라 약간 다르게 보일 수 있지만, 기본적인 리소스 구조는 두 모드 모두에서 동일하게 적용됩니다.

ECS의 리소스 관계는 아래와 같습니다.

Cluster (1)
├── Task (1:N, optional)
│   ├── Task Definition (1:1)
│   └── Container (1:N)
│
└── Service (1:N)
   └── Task (1:N)
       ├── Task Definition (1:1, shared in service)
       └── Container (1:N)

클러스터(Cluster)

ECS에서 가장 상위 수준의 리소스입니다. 클러스터는 서비스와 태스크를 그룹화하는 논리적인 단위입니다. 클러스터는 본질적으로 서버 클러스터를 추상화한 것입니다.

서비스(Service)

ECS 서비스는 선택한 태스크 정의와 네트워크 구성을 사용하여 태스크를 실행하는 방법을 정의합니다. 서비스는 태스크의 수를 지정하고 태스크가 실패할 경우 새 태스크를 시작하는 등의 기능을 제공합니다.

AWS ECS에서 서비스를 생성할 때는 특정 태스크 정의를 지정해야 합니다. 이 태스크 정의는 해당 서비스에 속한 모든 태스크에 사용됩니다. 즉, 서비스 내에서 실행되는 모든 태스크는 동일한 태스크 정의를 공유합니다. 서비스는 그 자체로 동일한 태스크 정의를 사용하여 여러 태스크를 관리하는 단위입니다.

각 태스크가 다른 태스크 정의를 사용하게 하려면, 각각 다른 서비스를 생성하거나, 단일 서비스 대신 개별 태스크를 직접 실행해야 합니다.

태스크 정의(Task Definition)

태스크 정의는 태스크를 실행하는 데 필요한 정보를 제공합니다. 태스크 정의는 실행할 컨테이너의 '레시피' 또는 '템플릿'입니다. 태스크 정의는 컨테이너가 어떤 Docker 이미지를 사용해야 하는지, 어떤 포트를 열어야 하는지, 어떤 볼륨을 마운트해야 하는지 등을 명시합니다. 이후에 태스크가 실행될 때, 이 태스크 정의에 따라 컨테이너가 구성되고 실행됩니다.

태스크(Task)

태스크는 실행중인 컨테이너 인스턴스의 단일 인스턴스입니다. 각 태스크는 하나 이상의 컨테이너를 실행하며, 이 컨테이너들은 동일한 태스크 정의를 공유합니다.

서비스 없이 바로 클러스터에 태스크를 추가할 수 있습니다. 이를 “단일 태스크” 실행이라고 부르며, 이 방식은 일회성 작업이나 짧은 작업을 실행하는 데 유용할 수 있습니다.

서비스를 사용하지 않고 태스크를 실행하면, 해당 태스크는 한 번 실행되고 완료되면 종료됩니다. 반면, 서비스를 사용하여 태스크를 실행하면, 서비스는 지정된 수의 실행 중인 태스크 인스턴스를 유지하려고 시도합니다. 즉, 태스크가 실패하거나 종료되면 자동으로 새 태스크를 시작합니다.

따라서, 서비스 없이 태스크를 실행하는 것은 일회성 작업이나 배치 작업에 적합하고, 서비스를 사용하는 것은 지속적으로 실행되어야 하는 애플리케이션에 더 적합합니다.

컨테이너(Container)

컨테이너는 독립 실행형 소프트웨어 패키지입니다. 어플리케이션 코드와 그것을 실행하는 데 필요한 모든 런타임, 시스템 도구, 시스템 라이브러리 등을 포함합니다.

Amazon ECS에서 컨테이너는 Docker 컨테이너를 사용하며, 태스크 정의에서 컨테이너의 설정을 세부적으로 정의할 수 있습니다. 컨테이너가 사용할 Docker 이미지, 메모리 및 CPU 요구사항, 네트워크 설정, 환경 변수, 볼륨 마운트 등이 포함됩니다.


Written by@박대성

독서와 지식관리에 관심이 많은 개발자

GitHub